﻿using DotNetty.Codecs;
using DotNetty.Handlers.Timeout;
using DotNetty.Transport.Channels;
using DotNetty.Transport.Channels.Sockets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WinFormsApp1.dotnetty
{
    internal class SocketDotNettyInitializer : ChannelInitializer<ISocketChannel>
    {
        protected override void InitChannel(ISocketChannel channel)
        {
            //工作线程连接器 是设置了一个管道，服务端主线程所有接收到的信息都会通过这个管道一层层往下传输
            //同时所有出栈的消息 也要这个管道的所有处理器进行一步步处理
            IChannelPipeline pipeline = channel.Pipeline;

            //中文发送解码
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            pipeline.AddLast(new StringEncoder());
            pipeline.AddLast(new StringDecoder());
            //出栈消息，通过这个handler 在消息顶部加上消息的长度
            //pipeline.AddLast("framing-enc", new LengthFieldPrepender(2));
            //入栈消息通过该Handler,解析消息的包长信息，并将正确的消息体发送给下一个处理Handler
            //pipeline.AddLast("framing-dec", new LengthFieldBasedFrameDecoder(ushort.MaxValue, 0, 2, 0, 2));
            //IdleStateHandler 心跳
            pipeline.AddLast(new IdleStateHandler(150, 0, 0));//第一个参数为读，第二个为写，第三个为读写全部
            //pipeline.AddLast(new );

            pipeline.AddLast("SocketServer", new SocketDotNettyHandler());
            
        }
    }
}
